package com.augurit.gzcgwsp.excelimportexport.service.impl;

import java.util.Date;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.dozer.DozerBeanMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.augurit.gzcgwsp.excelimportexport.dao.YwRqQyjyxkQysbclmcDao;
import com.augurit.gzcgwsp.excelimportexport.entity.YwRqQyjyxkQysbclmc;
import com.augurit.gzcgwsp.excelimportexport.entity.YwRqQyjyxkRypbqk;
import com.augurit.gzcgwsp.excelimportexport.service.IYwRqQyjyxkQysbclmcService;
import com.augurit.gzcgwsp.rqqyjyxk.entity.YwRqQyjyxkFinalQysbclmc;
import com.augurit.gzcgwsp.rqqyjyxk.entity.YwRqQyjyxkFinalRypbqk;
import com.augurit.gzcgwsp.rqqyjyxk.service.IYwRqQyjyxkFinalQysbclmcService;

/**
 * 广州市燃气经营许可证许可审批------八、企业申报材料目录
 * @author xgw
 *
 */
@Service
@Transactional
public class YwRqQyjyxkQysbclmcServiceImpl implements IYwRqQyjyxkQysbclmcService {
	@Autowired
	YwRqQyjyxkQysbclmcDao ywRqQyjyxkQysbclmcDao;
	@Autowired
	IYwRqQyjyxkFinalQysbclmcService sbclService;
	/**
	 * 保存 企业申报材料目录
	 * @param ywRqQyjyxkQysbclmc
	 */
	public void save(YwRqQyjyxkQysbclmc ywRqQyjyxkQysbclmc) {
		ywRqQyjyxkQysbclmcDao.save(ywRqQyjyxkQysbclmc);
	}
	
	/**
	 * 解析 企业申报材料目录
	 * @param hssfsheet
	 * @param acceptNo
	 * @param qyid
	 * @param username
	 * @return
	 */
	public void parseQysbclml(HSSFSheet hssfsheet, String acceptNo, Long qyid,String username) {
		String xh = null;//序号
		String clmc = null;//材料名称
		String ys = null;//页数
		String bz = null;//备注
		
		String hql = "from YwRqQyjyxkQysbclmc t where t.qyid = "+qyid+"";
		List<YwRqQyjyxkQysbclmc> list=ywRqQyjyxkQysbclmcDao.find(hql);
		for(int i=0;i<list.size();i++)
		{
			ywRqQyjyxkQysbclmcDao.delete(list.get(i));
		}
		
		try {

			HSSFRow hssfrow = hssfsheet.getRow(0);// 第一行
			// 遍历该行所有的行,j表示行数 getPhysicalNumberOfRows行的总数
			for (int j = 3; j < hssfsheet.getPhysicalNumberOfRows(); j++) {

				hssfrow = hssfsheet.getRow(j);
				// 判断是否还存在需要导入的数据
				if (hssfrow == null) {
					// System.out.println("这里已没有数据，在第" + i + "列,第" + j + "行");
					break;
				}
				
					if (hssfrow.getCell((short) 0) == null) {
						xh = "";
					} else if (hssfrow.getCell((short) 0).getCellType() == 0) {
						xh = new Double(hssfrow.getCell((short) 0).getNumericCellValue()).toString();
					} else {// 如果EXCEL表格中的数据类型为字符串型
						xh = hssfrow.getCell((short) 0).getStringCellValue().trim();
					}
					if (hssfrow.getCell((short) 1) == null) {
						clmc = "";
					} else if (hssfrow.getCell((short) 1).getCellType() == 0) {
						clmc = new Double(hssfrow.getCell((short) 1).getNumericCellValue()).toString();
					} else {// 如果EXCEL表格中的数据类型为字符串型
						clmc = hssfrow.getCell((short) 1).getStringCellValue().trim();
					}
					if (hssfrow.getCell((short) 2) == null) {
						ys = "";
					} else if (hssfrow.getCell((short) 2).getCellType() == 0) {
						ys = new Double(hssfrow.getCell((short) 2).getNumericCellValue()).toString();
					} else {// 如果EXCEL表格中的数据类型为字符串型
						ys = hssfrow.getCell((short) 2).getStringCellValue().trim();
					}
					if (hssfrow.getCell((short) 3) == null) {
						bz = "";
					} else if (hssfrow.getCell((short) 3).getCellType() == 0) {
						bz = new Double(hssfrow.getCell((short)3).getNumericCellValue()).toString();
					} else {// 如果EXCEL表格中的数据类型为字符串型
						bz = hssfrow.getCell((short) 3).getStringCellValue().trim();
					}
					
					
					if(StringUtils.isEmpty(clmc)){
						break;
					}else{
						YwRqQyjyxkQysbclmc ywRqQyjyxkQysbclmc = new YwRqQyjyxkQysbclmc();
						ywRqQyjyxkQysbclmc.setQyid(qyid);
						ywRqQyjyxkQysbclmc.setAcceptNo(acceptNo);
						ywRqQyjyxkQysbclmc.setUserName(username);
						ywRqQyjyxkQysbclmc.setUploadDate(new Date());
						ywRqQyjyxkQysbclmc.setXh(xh);
						ywRqQyjyxkQysbclmc.setClmc(clmc);
                        ys=(ys.indexOf(".")>=0)?(ys.substring(0,ys.indexOf("."))):ys;
						ywRqQyjyxkQysbclmc.setYs(ys);
						ywRqQyjyxkQysbclmc.setBz(bz);
						this.save(ywRqQyjyxkQysbclmc);
					}
					
				}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
     * 导出 企业申报材料目录
     * 
     * @param hssfsheet
     * @param acceptNo
     * @param qyid
     * @param username
     * @return
     */
    public HSSFSheet expQysbclml(HSSFSheet hssfsheet,
            String acceptNo, Long qyid, String username,HSSFCellStyle cs,String exptype){
    	if("qyxx".equals(exptype)){
    		 List<YwRqQyjyxkFinalQysbclmc> entityList = sbclService.getEntitysByQyId(qyid);
    	        if(entityList == null || entityList.size() <= 0) return null;
    	        if(entityList!=null)
    	        {
    	        try {
    	            /**
    	             * i代表生成的列表行，j表示数据的下标
    	             */
    	            for(int i = 3, j = 0; j< entityList.size(); i++){
    	                if(i < 3) continue;
    	                
    	                YwRqQyjyxkFinalQysbclmc entity = entityList.get(j);
    	                if(entity != null){
    	                    HSSFRow row = hssfsheet.createRow(i);// 创建一个行对象
    	                    HSSFCell cell0 = row.createCell(0);// 在本行的第一个单元格中写入数据
    	                    String xh=entity.getXh()==null?"":entity.getXh();
    	                    if(xh.indexOf(".")>=0){//如果序号含有.0
    	                    	xh=xh.substring(0,xh.indexOf("."));
    	                    }
    	                    HSSFRichTextString text0 = new HSSFRichTextString(xh);// 声明文本内容
    	                    cell0.setCellValue(text0);// 将文本对象加入单元格
    	                    cell0.setCellStyle(cs); 
    	                    
    	                    HSSFCell cell1 = row.createCell(1);// 在本行的第一个单元格中写入数据
    	                    HSSFRichTextString text1 = new HSSFRichTextString(entity.getClmc()==null?"":entity.getClmc());// 声明文本内容
    	                    cell1.setCellValue(text1);// 将文本对象加入单元格
    	                    cell1.setCellStyle(cs); 
    	                    
    	                    HSSFCell cell2 = row.createCell(2);// 在本行的第一个单元格中写入数据
    	                    String ys=entity.getYs()==null?"":entity.getYs();
    	                    ys=(ys.indexOf(".")>=0)?(ys.substring(0,ys.indexOf("."))):ys;
    	                    
    	                    HSSFRichTextString text2 = new HSSFRichTextString(ys);// 声明文本内容
    	                    
    	                    cell2.setCellValue(text2);// 将文本对象加入单元格
    	                    cell2.setCellStyle(cs); 
    	                    
    	                    HSSFCell cell3 = row.createCell(3);// 在本行的第一个单元格中写入数据
    	                    HSSFRichTextString text3 = new HSSFRichTextString(entity.getBz()==null?"":entity.getBz());// 声明文本内容
    	                    cell3.setCellValue(text3);// 将文本对象加入单元格
    	                    cell3.setCellStyle(cs); 
    	                }
    	                j++;
    	            }
    	        } catch (Exception e){
    	            e.printStackTrace();
    	        }
    	        }
    	}else{
    		 List<YwRqQyjyxkQysbclmc> entityList = this.getListByQyId(qyid);
    	        if(entityList == null || entityList.size() <= 0) return null;
    	        if(entityList!=null)
    	        {
    	        try {
    	            /**
    	             * i代表生成的列表行，j表示数据的下标
    	             */
    	            for(int i = 3, j = 0; j< entityList.size(); i++){
    	                if(i < 3) continue;
    	                
    	                YwRqQyjyxkQysbclmc entity = entityList.get(j);
    	                if(entity != null){
    	                    HSSFRow row = hssfsheet.createRow(i);// 创建一个行对象
    	                    HSSFCell cell0 = row.createCell(0);// 在本行的第一个单元格中写入数据
    	                    String xh=entity.getXh()==null?"":entity.getXh();
    	                    if(xh.indexOf(".")>=0){//如果序号含有.0
    	                    	xh=xh.substring(0,xh.indexOf("."));
    	                    }
    	                    HSSFRichTextString text0 = new HSSFRichTextString(xh);// 声明文本内容
    	                    cell0.setCellValue(text0);// 将文本对象加入单元格
    	                    cell0.setCellStyle(cs); 
    	                    
    	                    HSSFCell cell1 = row.createCell(1);// 在本行的第一个单元格中写入数据
    	                    HSSFRichTextString text1 = new HSSFRichTextString(entity.getClmc()==null?"":entity.getClmc());// 声明文本内容
    	                    cell1.setCellValue(text1);// 将文本对象加入单元格
    	                    cell1.setCellStyle(cs); 
    	                    String ys=entity.getYs()==null?"":entity.getYs();
                            ys=(ys.indexOf(".")>=0)?(ys.substring(0,ys.indexOf("."))):ys;
                            
    	                    HSSFCell cell2 = row.createCell(2);// 在本行的第一个单元格中写入数据
    	                    HSSFRichTextString text2 = new HSSFRichTextString(ys);// 声明文本内容
    	                    cell2.setCellValue(text2);// 将文本对象加入单元格
    	                    cell2.setCellStyle(cs); 
    	                    
    	                    HSSFCell cell3 = row.createCell(3);// 在本行的第一个单元格中写入数据
    	                    HSSFRichTextString text3 = new HSSFRichTextString(entity.getBz()==null?"":entity.getBz());// 声明文本内容
    	                    cell3.setCellValue(text3);// 将文本对象加入单元格
    	                    cell3.setCellStyle(cs); 
    	                }
    	                j++;
    	            }
    	        } catch (Exception e){
    	            e.printStackTrace();
    	        }
    	        }
    	}
       
        return hssfsheet;
    }

    private List<YwRqQyjyxkQysbclmc> getListByQyId(Long qyid){
        String hql = "from YwRqQyjyxkQysbclmc t where t.qyid='" + qyid + "'";
        List<YwRqQyjyxkQysbclmc> entityList = ywRqQyjyxkQysbclmcDao.find(hql);
        return entityList;
    }

    public void importFinalQyData(String acceptNo, Long qyid) {
        List<YwRqQyjyxkQysbclmc> list=this.getDatas(acceptNo, qyid);
        for(YwRqQyjyxkQysbclmc entity:list){
            YwRqQyjyxkFinalQysbclmc finalentity = new DozerBeanMapper().map(entity, YwRqQyjyxkFinalQysbclmc.class);
            finalentity.setId(null);
            this.sbclService.save(finalentity);
        }
    }
    
    /**
     * 
     * @return
     */
    private List<YwRqQyjyxkQysbclmc> getDatas(String acceptNo, Long qyid){
        String hql = "from YwRqQyjyxkQysbclmc t where t.qyid='" + qyid + "' and t.acceptNo='"+acceptNo+"'";
        return this.ywRqQyjyxkQysbclmcDao.find(hql);
    }

}
